﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ArrayApplication {
    
    internal class MyArray {
        static void Main(string[] args) {
            /**
             *二维数组
             */
            ///* 一个带有 5 行 2 列的数组 */
            //int[,] a = new int[5, 2] { { 0, 0 }, { 1, 2 }, { 2, 4 }, { 3, 6 }, { 4, 8 } };

            //int i, j;

            ///* 输出数组中每个元素的值 */
            //for (i = 0; i < 5; i++) {
            //    for (j = 0; j < 2; j++) {
            //        Console.WriteLine("a[{0},{1}] = {2}", i, j, a[i, j]);
            //    }
            //}
            //Console.ReadKey();


            /**
             * 一唯数组
             */
            //int[] n = new int[10]; /* n 是一个带有 10 个整数的数组 */
            ///* 初始化数组 n 中的元素 */
            //for (int i = 0; i < 10; i++) {
            //    n[i] = i + 100;
            //}
            ///* 输出每个数组元素的值 */
            //foreach (int j in n) {
            //    int i = j - 100;
            //    Console.WriteLine("Element[{0}] = {1}", i, j);
            //}
            //Console.ReadKey();


            /**
             *传递数组给函数
             */
            //MyArray app = new MyArray();
            ///* 一个带有 5 个元素的 int 数组 */
            //int[] balance = new int[] { 1000, 2, 3, 17, 50 };
            //double avg;

            ///* 传递数组的指针作为参数 */
            //avg = app.getAverage(balance, 5);
            ///* 输出返回值 */
            //Console.WriteLine("平均值是： {0} ", avg);
            //Console.ReadKey();




            //MyArray myArray =  new MyArray();
            //int sum = myArray.AddElements(512, 720, 250, 567, 889);
            //Console.WriteLine("总和是： {0}", sum);
            //Console.ReadKey();

            /**
             * Array 类
             */
            //int[] list = { 34, 72, 13, 44, 25, 30, 10 };

            //Console.Write("原始数组： ");
            //foreach (int i in list) {
            //    Console.Write(i + " ");
            //}
            //Console.WriteLine();

            //// 逆转数组
            //Array.Reverse(list);
            //Console.Write("逆转数组： ");
            //foreach (int i in list) {
            //    Console.Write(i + " ");
            //}
            //Console.WriteLine();

            //// 排序数组
            //Array.Sort(list);
            //Console.Write("排序数组： ");
            //foreach (int i in list) {
            //    Console.Write(i + " ");
            //}
            //Console.WriteLine();

            //Console.ReadKey();

            // 创建并初始化数组
            int[] numbers = { 5, 2, 8, 1, 3 };

            // 排序数组
            Array.Sort(numbers); // numbers = {1, 2, 3, 5, 8}

            // 查找元素
            int index = Array.BinarySearch(numbers, 5); // index = 3

            // 反转数组
            Array.Reverse(numbers); // numbers = {8, 5, 3, 2, 1}

            // 检查是否存在大于 6 的元素
            bool exists = Array.Exists(numbers, x => x > 6); // exists = true

            // 将数组元素乘以 2
            Array.ForEach(numbers, x => Console.WriteLine(x * 2));

            // 调整数组大小
            Array.Resize(ref numbers, 7); // numbers = {8, 5, 3, 2, 1, 0, 0}

            

        }

        /**
         * 方法
         */
        double getAverage(int[] arr, int size) {
            int i;
            double avg;
            int sum = 0;
            for (i = 0; i < size; ++i) {
                sum += arr[i];
            }
            avg = (double)sum / size;
            return avg;
        }

        /**
         *方法
         */
        public int AddElements(params int[] arr) {
            int sum = 0;
            foreach (int i in arr) {
                sum += i;
            }
            return sum;
        }
    }
    
   
}
